package cn.iocoder.yudao.module.bpm.api.tohandle;

import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.convert.ConvertBeanUtil;
import cn.iocoder.yudao.module.bpm.api.tohandle.dto.*;
import cn.iocoder.yudao.module.bpm.controller.admin.tohandle.center.vo.BpmHandleTaskRespVO;
import cn.iocoder.yudao.module.bpm.service.tohandle.BpmHandleCenterService;
import com.alibaba.druid.util.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;

import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.HANDLE_REQUEST_ID_ERROR;

/**
 * Flowable 待办中心 Api 实现类
 *
 * @author huangjunwei
 */
@Service
@Validated
public class BpmToHandleApiImpl implements BpmToHandleApi {
    @Resource
    BpmHandleCenterService bpmHandleCenterService;

    /**
     * 添加待办/待阅/
     * ..可供外部系统使用..
     *
     * @param bpmHandleTaskRespDTOList
     */
    @Override
    public CommonResult<List<Long>> addToHandleFlowTask(String requestId, List<BpmHandleFlowTaskCreateReqDTO> bpmHandleTaskRespDTOList) {
        if (StringUtils.isEmpty(requestId)) {
            return CommonResult.error(HANDLE_REQUEST_ID_ERROR);
        }
        //requestId校验，重复则直接返回当前已创建的任务id列表 todo redis存储

        List<Long> flowId = bpmHandleCenterService.addToHandleFlowTask(bpmHandleTaskRespDTOList);
        return CommonResult.success(flowId);
    }

    /**
     * 分页查询待办/待阅/已办/已阅任务列表
     *
     * @param pageParam
     * @param reqDTO
     * @return 待办列表
     */
    @Override
    public PageResult<BpmHandleTaskRespDTO> getToHandleTaskList(PageParam pageParam, @Valid BpmHandleTaskSearchReqDTO reqDTO) {
        PageResult<BpmHandleTaskRespVO> result = bpmHandleCenterService.getToHandleTaskList(pageParam, reqDTO);
        if (result == null) {
            return new PageResult<>();
        }
        List<BpmHandleTaskRespDTO> handleTaskRespDTOs = ConvertBeanUtil.convertToList(result.getList(), BpmHandleTaskRespDTO.class);
        return new PageResult<>(handleTaskRespDTOs, Long.valueOf(handleTaskRespDTOs.size()));
    }

    /**
     * 分页查询我发起的流程
     *
     * @param pageParam
     * @param reqDTO
     */
    @Override
    public PageResult<BpmFlowRespDTO> getFlowList(PageParam pageParam, @Valid BpmFlowSearchReqDTO reqDTO) {
        return null;
    }

    /**
     * 添加收藏
     *
     * @param createCollectReqDtos
     */
    @Override
    public List<Long> addCollect(List<BpmCollectCreateReqDto> createCollectReqDtos) {
        return null;
    }

    /**
     * 分页查询我的收藏
     *
     * @param pageParam
     * @param bpmCollectSearchReqDto
     */
    @Override
    public List<BpmCollectInfoResDto> searchCollect(PageParam pageParam, BpmCollectSearchReqDto bpmCollectSearchReqDto) {
        return null;
    }
}
